package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.VerificacionVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.io.UnsupportedEncodingException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.Collection;
import java.util.LinkedList;

public class VerificacionDAO {
	/**
	 * Conexion a la base de datos.
	 */
	private Connection conn = null;
	private ConnectionFactory cf;

	/**
	 * Constructor que inicializa la conexion con la base de datos.
	 * @param conn Conexion con la base de datos.
	 */

	public VerificacionDAO( ConnectionFactory cf ) {
		this.cf = cf;
		try{
			this.conn = this.cf.getConnection();
		}catch(SQLException e){
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSSPE - cwsub ********/");
		}
	}
    
	public Connection getConn(){
		return conn;
	}
    
	public void uploadFile(byte[] fileData, String nomUser) throws SQLException, UnsupportedEncodingException {
		String strData = new String(fileData, "ISO-8859-1");
		        
		String strSql = "{call beneficios.p_pobla_datos_de_clob_veri(?, '"+nomUser+"')}" ;
		CallableStatement cs = conn.prepareCall(strSql) ;
		// Set the value for the IN parameter
		cs.setString(1, strData);
		// Execute the stored procedure
		cs.execute();
            
	}
    
	public void deleteRecordsOld(String nomUser) throws SQLException {
		String strSql = "delete from TCS_BEN_SUB_VERIFICACION " +
						" WHERE USUARIO_CREA = "+ nomUser;
                        
		int i = cf.execSql(strSql,null,conn);
	}
    
	public Collection getVerification(String nomUser) throws SQLException {
		String query = "select ben.numero_documento DOCUMENTO, v.numero_documento DOCUMENTOVERI, " +
					   " ben.PRIMER_NOMBRE PRIMERNOMBRE, v.PRIMER_NOMBRE PRIMERNOMBREVERI, ben.SEGUNDO_NOMBRE SEGUNDONOMBRE, " +
					   " v.SEGUNDO_NOMBRE SEGUNDONOMBREVERI, ben.PRIMER_APELLIDO PRIMERAPELLIDO, v.PRIMER_APELLIDO PRIMERAPELLIDOVERI, " +
					   " ben.SEGUNDO_APELLIDO SEGUNDOAPELLIDO, v.SEGUNDO_APELLIDO SEGUNDOAPELLIDOVERI, ben.sexo SEXO,a.nombre DEPENDENCIA, " +
					   " p.NOMBRE PROGRAMA, sp.NOMBRE BENEFICIO, bot.VALOR_BENEFICIO VALOR, to_char(bot.FECHA_BENEFICIO, 'yyyy-mm-dd') FECHABENE, " +
					   " ben.FICHA_SISBEN FICHASISBEN, ben.HOGAR_SISBEN HOGARSISBEN, ben.PUNTAJE_SISBEN PUNTAJESISBEN, ben.NIVEL_SISBEN NIVELSISBEN, to_char(ben.FE_ENCUESTA_SISBEN, 'yyyy-mm-dd') FECHAENCUESTA \n" + 
					   " FROM tcs_ben_beneficiario ben, tcs_ben_sub_verificacion v, tcs_ben_beneficio_otorgado bot, " +
					   " TCS_BEN_SUBPROGRAMA sp, TCS_BEN_PROGRAMA p, tcs_ben_area a\n" + 
					   " where ben.numero_documento = v.numero_documento\n" + 
					   " and ben.CODIGO = bot.BEN_CODIGO\n" + 
					   " and bot.SBPR_CODIGO = sp.CODIGO\n" + 
					   " and sp.PRG_CODIGO = p.CODIGO\n" + 
					   " and p.AREA_CODIGO = a.CODIGO\n" + 
					   " and v.USUARIO_CREA = "+ nomUser;                       
        
		Collection verificados = new LinkedList();
		ResultSet rst = null;
        
		rst = cf.getRecordsRset(query, null, conn);
        
		VerificacionVO verificadoVO = null;
        
		while(rst.next()){
			verificadoVO = new VerificacionVO();
            
			verificadoVO.setNumeroDocumento(rst.getString("DOCUMENTO"));
			verificadoVO.setNumeroDocumentoVeri(rst.getString("DOCUMENTOVERI"));
			verificadoVO.setPrimerNombre(rst.getString("PRIMERNOMBRE"));
			verificadoVO.setPrimerNombreVeri(rst.getString("PRIMERNOMBREVERI"));
			verificadoVO.setSegundoNombre(rst.getString("SEGUNDONOMBRE"));
			verificadoVO.setSegundoNombreVeri(rst.getString("SEGUNDONOMBREVERI"));
			verificadoVO.setPrimerApellido(rst.getString("PRIMERAPELLIDO"));
			verificadoVO.setPrimerApellidoVeri(rst.getString("PRIMERAPELLIDOVERI"));
			verificadoVO.setSegundoApellido(rst.getString("SEGUNDOAPELLIDO"));
			verificadoVO.setSegundoApellidoVeri(rst.getString("SEGUNDOAPELLIDOVERI"));
			verificadoVO.setSexo(rst.getString("SEXO"));
			verificadoVO.setDependencia(rst.getString("DEPENDENCIA"));
			verificadoVO.setPrograma(rst.getString("PROGRAMA"));
			verificadoVO.setBeneficio(rst.getString("BENEFICIO"));
			verificadoVO.setValorBeneficio(rst.getLong("VALOR"));
			verificadoVO.setFechaBeneficio(rst.getString("FECHABENE"));
			verificadoVO.setFichaSisben(rst.getString("FICHASISBEN"));
			verificadoVO.setHogarSisben(rst.getString("HOGARSISBEN"));
			verificadoVO.setPuntajeSisben(rst.getString("PUNTAJESISBEN"));
			verificadoVO.setNivelSisben(rst.getInt("NIVELSISBEN"));
			verificadoVO.setFechaSisben(rst.getString("FECHAENCUESTA"));
            
			verificados.add(verificadoVO);
		}     
        
		return verificados;
	}
}

